package practise01

/** *
  * 套路2:配合class使用
  * 在一个类的伴生对象中定义apply方法，并在apply方法中new该类。
  * 最终在使用该类时，可以省去new关键字，使用语法糖即可。
  */
class applyTwo {
  def sayClass = s"class"
}

object applyTwo {
  def sayClass = s"object"

  def apply() = new applyTwo

  def apply(s:String) = s"$s"
}

class applyTwoS(s:String){
  def sayClass = s"$s is class "
}

object applyTwoS{
  def sayObject = s"object"

  def apply(s:String) = new applyTwoS(s)
}

object applyTwoTest {
  def main(args: Array[String]): Unit = {
    //使用语法糖括号，来调用类中的方法
    val a = applyTwo()
    println(a.sayClass) //class

    //调用单例类中的方法，则是不使用括号
    val b = applyTwo
    println(b.apply())  //practise01.applyTwo@129a8472
    println(b.apply("hello")) //hello

    //一般这么做是为了更方便简洁的传值，或者说更加简便的调用class
    val c = applyTwoS("applyTwoS")
    println(c.sayClass)  //applyTwoS is class
  }
}